#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>

int main()
{
    // ps -ef | grep pipe

    int pipefd[2];
    int ret = pipe(pipefd);
    if (ret < 0) {
        perror("pipe error");
        return -1;
    }
    int id1 = fork();
    if (id1 == 0) {
        //dup2(int oldfd, int newfd);
        dup2(pipefd[1], 1);
        execlp("ps", "ps", "-ef", NULL);
        exit(-1);
        //此处不需要关闭写端，ps-ef操作完毕之后，会自动退出
    }
    int id2 = fork();
    if (id2 == 0) {
        close(pipefd[1]);//关闭写端
        dup2(pipefd[0], 0);
        execlp("grep", "grep", "pipe", NULL);
        exit(-1);
    }
    close(pipefd[1]);
    close(pipefd[0]);
    wait(NULL);
    wait(NULL);
    return 0;
}
